package com.kurt.repository;

import com.kurt.entity.SysUserDataPermission;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 用户数据权限Repository接口
 * 提供用户数据权限数据访问方法
 */
@Repository
public interface SysUserDataPermissionRepository extends JpaRepository<SysUserDataPermission, Long>, JpaSpecificationExecutor<SysUserDataPermission> {

    /**
     * 根据用户ID查找数据权限列表
     *
     * @param userId 用户ID
     * @return 数据权限列表
     */
    List<SysUserDataPermission> findByUserId(Long userId);

    /**
     * 根据用户ID和实体类型查找数据权限列表
     *
     * @param userId     用户ID
     * @param entityType 实体类型
     * @return 数据权限列表
     */
    List<SysUserDataPermission> findByUserIdAndEntityType(Long userId, String entityType);

    /**
     * 根据用户ID、实体类型和资源ID查找数据权限列表
     *
     * @param userId     用户ID
     * @param entityType 实体类型
     * @param resourceId 资源ID
     * @return 数据权限列表
     */
    List<SysUserDataPermission> findByUserIdAndEntityTypeAndResourceId(Long userId, String entityType, Long resourceId);

    /**
     * 检查权限是否存在
     *
     * @param userId     用户ID
     * @param entityType 实体类型
     * @param resourceId 资源ID
     * @return 是否存在
     */
    boolean existsByUserIdAndEntityTypeAndResourceId(Long userId, String entityType, Long resourceId);

    /**
     * 根据用户ID、实体类型和资源ID删除数据权限
     *
     * @param userId     用户ID
     * @param entityType 实体类型
     * @param resourceId 资源ID
     */
    void deleteByUserIdAndEntityTypeAndResourceId(Long userId, String entityType, Long resourceId);

    /**
     * 根据用户ID删除所有数据权限
     *
     * @param userId 用户ID
     */
    void deleteByUserId(Long userId);

    /**
     * 根据实体类型删除所有数据权限
     *
     * @param entityType 实体类型
     */
    void deleteByEntityType(String entityType);
}
